package com.xiaoping.recyclerview3;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mRecyclerViewAdapter;
    private ArrayList<String> mTitles = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView = findViewById(R.id.recycler_view);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        mTitles.add("111");
        mTitles.add("222");
        mTitles.add("333");
        mTitles.add("444");
        mTitles.add("555");
        mTitles.add("666");
        mTitles.add("777");
        mRecyclerView.setAdapter(new MyAdapter(MainActivity.this, mTitles));
        mRecyclerViewAdapter = mRecyclerView.getAdapter();
        findViewById(R.id.btn_1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //这里要加一个判定，不然可能会闪退
                int pos = 3;
                if (mTitles.size() > pos) {
                    mTitles.remove(pos);//更新array
                    mRecyclerViewAdapter.notifyItemRemoved(pos);//有动画
                    //adapter.notifyItemRangeRemoved(0, 3);//批量删除
                    //mRecyclerViewAdapter.notifyDataSetChanged();//数据改变(没有动画，原本有动画也会没有
                    mRecyclerView.scrollToPosition(pos);//滑动
                }
            }
        });

        findViewById(R.id.btn_2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //这里的判定就不写了
                mTitles.add(0,"test");//在mTitles的第一个位置添加
                mTitles.add(0,"test1");
                mTitles.add(0,"test2");
                mTitles.add(0,"test3");
                //RecyclerView列表进行批量UI数据更新
                mRecyclerViewAdapter.notifyItemRangeInserted(0,4);//有动画
                //mRecyclerViewAdapter.notifyDataSetChanged();//数据改变(没有动画，原本有动画也会没有
                //作用是把列表移动到顶端
                mRecyclerView.scrollToPosition(0);
            }
        });

        findViewById(R.id.btn_3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int pos = 5;
                //判定
                if (mTitles.size() <= pos){
                    pos = mTitles.size();
                }
                mTitles.add(pos,"test");//在mTitles的第一个位置添加
                //RecyclerView列表进行批量UI数据更新
                mRecyclerViewAdapter.notifyItemInserted(pos);//有动画
                //mRecyclerViewAdapter.notifyDataSetChanged();//数据改变(没有动画，原本有动画也会没有
                //作用是把列表移动到顶端
                mRecyclerView.scrollToPosition(pos);
            }
        });

        findViewById(R.id.btn_4).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //移动，第二个移动到第五个位置
                mRecyclerViewAdapter.notifyItemMoved(1,4);//有动画
                //mRecyclerViewAdapter.notifyDataSetChanged();//数据改变(没有动画，原本有动画也会没有
            }
        });

        //前面的都是pos有问题的
        findViewById(R.id.btn_5).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mTitles.add("last");//在最后添加
                mTitles.add(3, "44444");//在第4个添加
                mRecyclerViewAdapter.notifyDataSetChanged();//数据改变(没有动画
            }
        });

        findViewById(R.id.btn_6).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mTitles.set(1, "change");
                mRecyclerViewAdapter.notifyItemChanged(1);//有动画
            }
        });
        //adapter.notifyItemRangeChanged(0, 3);//修改多个元素
    }
}